"""请求与响应模型（Pydantic 模型）

拆分用途：
- Token / TokenPayload
- 用户创建、管理员创建、修改密码
- 用户读取（返回给前端的公共字段）
"""

from typing import Optional

from pydantic import BaseModel


class Token(BaseModel):
    """登录或注册后返回的访问令牌"""

    access_token: str
    token_type: str = "bearer"


class TokenPayload(BaseModel):
    """JWT 负载结构（解析后的数据）"""

    sub: Optional[str] = None
    scopes: list[str] = []


class UserCreate(BaseModel):
    """普通用户注册请求体"""

    username: str
    password: str


class AdminCreate(BaseModel):
    """管理员创建管理员的请求体"""

    username: str
    password: str


class ChangePassword(BaseModel):
    """当前用户修改密码的请求体"""

    current_password: str
    new_password: str


class AdminChangePassword(BaseModel):
    """管理员修改指定用户密码的请求体"""

    username: str
    new_password: str


class UserStatusUpdate(BaseModel):
    """管理员更新用户启用/禁用状态"""

    disabled: bool


class AdminUserCreate(BaseModel):
    """管理员创建用户的请求体"""

    username: str
    password: str
    role: str = "user"
    disabled: bool = False


class UserRead(BaseModel):
    """用户对外展示的数据模型（不含敏感字段）"""

    id: int
    username: str
    disabled: bool
    role: str


